home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / deskbar-applet / handlers / desklicious.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-04-29  |  6.4 KB  |  132 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. import os
  5. import cgi
  6. import os.path as os
  7. import deskbar
  8. import deskbar.Match as deskbar
  9. import deskbar.Handler as deskbar
  10. import deskbar.Utils as deskbar
  11. import gnomevfs
  12. import gtk
  13. import gconf
  14. from gettext import gettext as _
  15. import xml.dom.minidom as xml
  16. import urllib
  17. from deskbar.defs import VERSION
  18. GCONF_DELICIOUS_USER = deskbar.GCONF_DIR + '/desklicious/user'
  19. DEFAULT_QUERY_TAG = 'http://del.icio.us/rss/%s/%s'
  20. QUERY_DELAY = 1
  21.  
  22. def _check_requirements():
  23.     if not deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER):
  24.         return (deskbar.Handler.HANDLER_HAS_REQUIREMENTS, _('You need to configure your del.icio.us account.'), _on_config_account)
  25.     else:
  26.         return (deskbar.Handler.HANDLER_IS_CONFIGURABLE, _('You can modify your del.icio.us account.'), _on_config_account)
  27.  
  28. HANDLERS = {
  29.     'DeliciousHandler': {
  30.         'name': _('del.icio.us Bookmarks'),
  31.         'description': _('Search your del.icio.us bookmarks by tag name'),
  32.         'requirements': _check_requirements,
  33.         'version': VERSION } }
  34.  
  35. def _on_config_account(dialog):
  36.     dialog = gtk.Dialog(_('del.icio.us Account'), dialog, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
  37.     table = gtk.Table(rows = 2, columns = 2)
  38.     table.attach(gtk.Label(_('Enter your del.icio.us username below')), 0, 2, 0, 1)
  39.     user_entry = gtk.Entry()
  40.     t = deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER)
  41.     if t != None:
  42.         user_entry.set_text(t)
  43.     
  44.     table.attach(gtk.Label(_('Username: ')), 0, 1, 1, 2)
  45.     table.attach(user_entry, 1, 2, 1, 2)
  46.     table.show_all()
  47.     dialog.vbox.add(table)
  48.     response = dialog.run()
  49.     dialog.destroy()
  50.     if response == gtk.RESPONSE_ACCEPT and user_entry.get_text() != '':
  51.         deskbar.GCONF_CLIENT.set_string(GCONF_DELICIOUS_USER, user_entry.get_text())
  52.     
  53.  
  54.  
  55. class DeliciousMatch(deskbar.Match.Match):
  56.     
  57.     def __init__(self, handler, url = None, tags = None, author = None, **args):
  58.         deskbar.Match.Match.__init__(self, handler, **args)
  59.         self.url = url
  60.         self.tags = tags
  61.         self.author = author
  62.  
  63.     
  64.     def get_verb(self):
  65.         return "<b>%(name)s</b>\n<span size='small' foreground='grey'>%(tags)s</span>"
  66.  
  67.     
  68.     def get_name(self, text = None):
  69.         return {
  70.             'name': cgi.escape(self.name),
  71.             'tags': cgi.escape(' '.join(self.tags)) }
  72.  
  73.     
  74.     def action(self, text = None):
  75.         deskbar.Utils.url_show(self.url)
  76.  
  77.     
  78.     def get_category(self):
  79.         return 'web'
  80.  
  81.     
  82.     def get_hash(self, text = None):
  83.         return self.url
  84.  
  85.  
  86.  
  87. class DeliciousHandler(deskbar.Handler.AsyncHandler):
  88.     
  89.     def __init__(self):
  90.         deskbar.Handler.AsyncHandler.__init__(self, 'delicious.png')
  91.         self._delicious = DeliciousTagQueryEngine(self)
  92.  
  93.     
  94.     def query(self, tag):
  95.         self.check_query_changed(timeout = QUERY_DELAY)
  96.         self.check_query_changed()
  97.         print 'Asking del.icio.us tags for %s' % tag
  98.         posts = self._delicious.get_posts_by_tag(tag)
  99.         self.check_query_changed(timeout = QUERY_DELAY)
  100.         print 'Returning del.icio.us result', posts
  101.         return posts
  102.  
  103.  
  104.  
  105. class DeliciousTagQueryEngine:
  106.     
  107.     def __init__(self, handler):
  108.         '''We need use the globals DELICIOUS_USER and DELICIOUS_PASS'''
  109.         self.handler = handler
  110.         self._user = deskbar.GCONF_CLIENT.get_string(GCONF_DELICIOUS_USER)
  111.         deskbar.GCONF_CLIENT.notify_add((GCONF_DELICIOUS_USER,), (lambda x, y, z, a: self.on_username_change(z.value)))
  112.  
  113.     
  114.     def on_username_change(self, value):
  115.         if value != None and value.type == gconf.VALUE_STRING:
  116.             self._user = value.get_string()
  117.         
  118.  
  119.     
  120.     def get_posts_by_tag(self, tag):
  121.         url = DEFAULT_QUERY_TAG % (urllib.quote_plus(self._user), urllib.quote_plus(tag))
  122.         stream = urllib.urlopen(url, proxies = deskbar.Utils.get_proxy())
  123.         dom = xml.dom.minidom.parse(stream)
  124.         stream.close()
  125.         posts = []
  126.         for item in dom.getElementsByTagName('item'):
  127.             posts.append(DeliciousMatch(self.handler, name = item.getElementsByTagName('title')[0].firstChild.nodeValue, url = item.getElementsByTagName('link')[0].firstChild.nodeValue, tags = item.getElementsByTagName('dc:subject')[0].firstChild.nodeValue.split(' '), author = item.getElementsByTagName('dc:creator')[0].firstChild.nodeValue))
  128.         
  129.         return posts
  130.  
  131.  
  132.